#第一题-直方图####
#unlist法
data_1<-unlist(data)
hist(data_1,breaks=10)

#力大砖飞法
data_2<-numeric()#创建一个空的数值向量
print(nrow(data))
for (i in 1:nrow(data))
{
  for (j in 1:ncol(data))
  {
    data_2=c(data_2,data[i,j])#遍历数据框，把数据逐个添入向量
  }
}
hist(data_2)
hist(data_2,breaks = c(0,1.0e+10,2.0e+10,3.0e+10),labels = TRUE)#尝试自定义分组和显示统计数目

#第二题-层次聚类分析####
tree<-hclust(dist(data),method="average")#dist()计算观测点间的距离，距离计算方法为平均距离法
plot(tree)

#第三题-热图####
#参考自GPT4
# 安装和加载包
install.packages("ggplot2")
library(ggplot2)

# 加载数据
setwd("D:\\R_DATA")
load("volcano.RData")  # 确保volcano.RData文件在当前工作目录中

# 添加分类标签
prostat$category <- "not significant"
prostat$category[prostat$P < 0.05 & prostat$FC > log2(1.2)] <- "upregulated"
prostat$category[prostat$P < 0.05 & prostat$FC < -log2(1.2)] <- "downregulated"


# 计算 -log10 p值
prostat$negLog10P <- -log10(prostat$P)

# 绘制火山图
volcano_plot <- ggplot(prostat, aes(x=FC, y=negLog10P, color=category)) +
  geom_point(alpha=0.5) +  # 点的透明度设置为0.5
  geom_vline(xintercept = log2(1.2), linetype="dashed", color="black") +  # 上调分隔线
  geom_vline(xintercept = -log2(1.2), linetype="dashed", color="black") +  # 下调分隔线
  geom_hline(yintercept = -log10(0.05), linetype="dashed", color="black") + # 添加P值显著性水平线
  scale_color_manual(values=c("not significant"="grey", "upregulated"="red", "downregulated"="blue")) + #各类规定颜色
  labs(x="Log2 Fold Change", y="-Log10 P-value", title="Volcano Plot") + #设计图标签
  theme_minimal()

# 查看火山图
print(volcano_plot)

# 保存图像
ggsave("volcano_plot.jpg", plot=volcano_plot, width=8, height=6)


